其他
MacOS 下Nuikta编译PyQt5程序碰到的坑
第一次接触它已经是半年多前,尝试着编译了个hello world便因为有事搁置一边。
昨天看到朋友圈里有人安利它,忍不住,又试试了试,成功编译了4个应用
hello world
pyqt5 hello world
pyqt5 与sqlite
diffexcel
为了方便记录步骤和输出结果,这次仍然选择了Jupyter Notebook(不过是在VS Code里,感觉在这里更方便)
环境
!conda create -y -n nuitka python=3.7
!conda activate nuitka
cd nuitka
!pip install nuitka pyqt5
!python -m nuitka --version
返回
0.6.7
Python: 3.7.7 (default, Mar 26 2020, 10:32:53)
Executable: /Users/steven/anaconda3/envs/eric/bin/python
OS: Darwin
Arch: x86_64
第一个程序,hello world
hello.py
%%writefile hello.py
def main():
print("你好 Nuitka!")
if __name__ == "__main__":
main()
编译
!python -m nuitka --standalone --clang \
--follow-imports hello.py
测试
!hello.dist/hello
成功运行,返回
你好 Nuitka!
完整的helloworld竟然有23M
第二个程序 pyqt5 hello world
pyqt5_hello_world.py
%%writefile pyqt5_hello_world.py
import sys
from PyQt5 import QtWidgets
app = QtWidgets.QApplication(['HelloWorld'])
button = QtWidgets.QPushButton('Click me!')
button.show()
sys.exit(app.exec())
编译
!python -m nuitka --standalone \
--windows-disable-console \
--enable-plugin=qt-plugins \
pyqt5_hello_world.py
运行
!pyqt5_hello_world.dist/pyqt5_hello_world
返回
Segmentation fault: 11
接下来就是漫长的查找原因过程,网上搜索各种资料,没有答案,issues里也有人提到了这个问题,最后的结果让人有些欲哭无泪,就是因为少了一个空目录
mkdir pyqt5_hello_world.dist/PyQt5/Qt
再次运行,成功
窗口有些小,看得到吗?
第三个程序 PyQt5 + SQLite的应用
代码(网上碰巧看到的一个例子),
!git clone https://github.com/Maxzor/ABL_sugg
cd ABL_sugg
编译
!python -m nuitka --standalone \
--windows-disable-console \
--plugin-enable=qt-plugins=sqldrivers,iconengines,imageformats,mediaservice,platforms,printsupport \
--recurse-not-to=numpy --recurse-all \
--output-dir=o main.py
这里需要指定具体enable哪些qt-plugin,主要是在默认plugins的基础上再要引入sqldrivers
测试
#创建空Qt目录
mkdir o/main.dist/PyQt5/Qt
#数据导入
!cat sqlite3_dump.sql|sqlite3 o/main.dist/as.db
#运行程序
!cd o/main.dist && ./main
成功
第四个程序, Pandas测试
网上找到的一个利用Pandas比较两个Excel差异的例子,命令行,执行成功
这里就先放个执行截图,具体软件的介绍留着下次再详细介绍吧。
生成的output.xlsx总共有3个sheets,分别是removed,added,changed
如果喜欢的话,可以点[在看],或者打赏,如果有什么建议和意见,也欢迎留言,或者加我个人微信,